home *** CD-ROM | disk | FTP | other *** search
- Path: xanth!cs.odu.edu!Amiga-Request
- From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
- Newsgroups: comp.sources.amiga
- Subject: v90i032: rm - delete substitute that allows file recovery, Part01/01
- Message-ID: <11139@xanth.cs.odu.edu>
- Date: 28 Jan 90 19:40:37 GMT
- Sender: tadguy@cs.odu.edu
- Reply-To: mjl@alison.at (Martin J. Laubach)
- Lines: 846
- Approved: tadguy@cs.odu.edu (Tad Guy)
- X-Mail-Submissions-To: Amiga@cs.odu.edu
-
- Submitted-by: mjl@alison.at (Martin J. Laubach)
- Posting-number: Volume 90, Issue 032
- Archive-name: util/rm
-
- Here comes rm, a delete substitute "plus" -- since I've heard (read)
- some pleas for something like it lately, here it is. It moves the files
- to a temp directory instead of immediately deleting them. Should you
- accidentally remove something important, it thus can be recovered. See
- the included docs for more details.
-
- [ uuencoded executable enclosed. ...tad ]
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 1)."
- # Contents: makefile purge rm.asm rm.doc rm.uu
- # Wrapped by tadguy@xanth on Sun Jan 28 14:40:28 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'makefile'\"
- else
- echo shar: Extracting \"'makefile'\" \(155 characters\)
- sed "s/^X//" >'makefile' <<'END_OF_FILE'
- XINCLUDE = inc:include.i
- X
- X.asm.o:
- X casm -a $*.asm -o $*.o -i $(INCLUDE) -c qrv
- X
- Xrm: rm.o
- X blink rm.o to rm lib lib:arpnb.lib lib:amiga.lib sc sd verbose nd
- END_OF_FILE
- if test 155 -ne `wc -c <'makefile'`; then
- echo shar: \"'makefile'\" unpacked with wrong size!
- fi
- # end of 'makefile'
- fi
- if test -f 'purge' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'purge'\"
- else
- echo shar: Extracting \"'purge'\" \(536 characters\)
- sed "s/^X//" >'purge' <<'END_OF_FILE'
- X.key drive
- X.bra [
- X.ket ]
- X
- Xif [drive]~ eq ~
- X purge DH0:
- X purge DH1:
- Xelse
- X info [drive] | search STDIN [drive] | read num drive size used free per errs stat name
- X delete >nil: [drive]Junk/#? all quiet
- X info [drive] | search STDIN [drive] | read num drive size used1 free1 per1 errs stat name
- X
- X rx "parse value '${per1}' || '${per}' with p1 '%' p '%'; say 'Purged ${drive} (${name}, ${size}) -- Usage went from ${per} to ${per1} ('p1-p'%).'"
- X
- X diff= num= drive= size= used= free= per= errs= stat= name= used1= free1=
- X per1=
- Xendif
- X
- END_OF_FILE
- if test 536 -ne `wc -c <'purge'`; then
- echo shar: \"'purge'\" unpacked with wrong size!
- fi
- # end of 'purge'
- fi
- if test -f 'rm.asm' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'rm.asm'\"
- else
- echo shar: Extracting \"'rm.asm'\" \(6702 characters\)
- sed "s/^X//" >'rm.asm' <<'END_OF_FILE'
- X;- :ts=12 --------------------------------------------------------
- X;
- X; rm -- remove files with Oops! possibility
- X;
- X; /|||\ (c) Copyright 1989 by Martin J. Laubach
- X; //|||\\ All rights reserved
- X; ///|||\\\
- X;
- X;-----------------------------------------------------------------
- X
- X ifd CAPE
- X optimon
- X addsym
- X objfile "rm.o"
- X endc
- X
- X include "exec/types.i"
- X include "exec/alerts.i"
- X include "exec/libraries.i"
- X include "libraries/dos.i"
- X include "arp/arpbase.i"
- X
- Xcall macro
- X ifnd _LVO\1
- X xref _LVO\1
- X endc
- X jsr _LVO\1(a6)
- X endm
- X
- X xref _LVOAlert
- X
- XScratchSiz: equ 256
- XJunkSiz: equ 80
- X
- X section Remove,code
- X
- X;---------------------------------------------------------------------------
- X; Try to open arp.library first. Write NoArp text if failure
- X
- Xmain: RESIDENT 3000
- X
- X movem.l a0/d0,-(a7)
- X
- X move.l 4,a6
- X lea ArpN(pc),a1
- X moveq #34,d0
- X call OpenLibrary
- X tst.l d0
- X bne.s ArpOK
- X lea DosN(pc),a1
- X moveq #34,d0
- X call OpenLibrary
- X tst.l d0
- X bne.s DosOK
- X
- X;-------------------------------------
- X; Recoverable alert if no dos.library found
- X
- XalertDos: ALERT (AG_OpenLib!AO_DOSLib)
- X
- XEFail: moveq #RETURN_FAIL,d0
- X rts
- X
- X;-------------------------------------
- X; Write OhAhNoArp text for user without arp.library
- X; Expects DOSBase in D0
- X
- XDosOK: move.l d0,a6
- X call Output
- X move.l d0,d1
- X lea NoArp(pc),a0
- X move.l a0,d2
- X moveq #NoArpEnd-NoArp,d3
- X call Write
- X
- X move.l a6,a1
- X move.l 4,a6
- X call CloseLibrary
- X
- X bra.s EFail
- X
- X;-------------------------------------
- X; Arp opened ok, now parse the command line
- X; Expects ArpBase in D0
- X
- XArpOK: move.l d0,a6
- X movem.l (a7)+,a0/d0
- X
- X lea CLIHelp(pc),a1
- X lea -4(a7),a7
- X move.l a7,a2
- X lea CLITemp(pc),a3
- X call GADS
- X move.l (a7),a5
- X lea 4(a7),a7
- X
- X;-------------------------------------
- X; Check parameters, write usage if less than one
- X; Expects D0 number of paramaters
- X
- X tst.l d0
- X bne.s ParamOK
- X lea Usage(pc),a1
- X call Puts
- X bra.s EFail
- X
- X;--------------------------------------------------------------------------
- X; Parameters ok, begin to work on them
- X; D0: argument count
- X; A5: argument vector
- X
- XParamOK: move.l d0,d7
- X
- X lea -JunkSiz(a7),a7
- X move.l a7,a2
- X
- X lea Junk(pc),a0
- X move.l a2,a1
- X moveq #JunkSiz,d0
- X call Getenv
- X
- X tst.b (a2)
- X bne.s NoEnv
- X
- X lea Junk(pc),a2
- X
- XNoEnv: subq.l #1,d7
- X
- X moveq #0,d5
- X moveq #0,d6
- X
- X lea -ScratchSiz(a7),a7
- X move.l a7,a3
- X
- XNextPar: move.l #SIGBREAKF_CTRL_C,d1
- X sub.l a1,a1
- X call CheckBreak
- X tst.l d0
- X bne BreakRcvd
- X
- X move.l (a5)+,a4
- X
- X;-------------------------------------
- X; Check if parameter contains | # ?
- X; Expects ¶meter to check in A4, A3 scratch buffer
- X
- XChk4Pat: move.l a4,a1
- X;;; moveq #0,d1
- X1$: move.b (a1)+,d0
- X beq.s NoPattern
- X cmp.b #'?',d0
- X beq.s Pattern
- X cmp.b #'|',d0
- X beq.s Pattern
- X cmp.b #'#',d0
- X bne.s 1$
- X
- X;-------------------------------------
- X; Yes, must do pattern matching
- X; A4 supplied file name, A3 scratch buffer
- X; D6 return code, D5 return value
- X
- XPattern: lea -ap_SIZEOF-256(a7),a7
- X
- X move.l #SIGBREAKF_CTRL_C,ap_BreakBits(a7)
- X move.l #256,ap_Length(a7)
- X
- X move.l a4,d0
- X move.l a7,a0
- X call FindFirst
- X1$: move.l d0,d6
- X bne.s NoFiles
- X
- X tst.l d5
- X bne.s NoFiles
- X
- X lea ap_SIZEOF(a7),a4
- X bsr.s Remove
- X;;; tst.l d0
- X bne.s 2$
- X moveq #RETURN_FAIL,d5
- X
- X2$: move.l a7,a0
- X call FindNext
- X bra.s 1$
- X
- XNoFiles: tst.l d6
- X beq.s 1$
- X cmp.w #ERROR_NO_MORE_ENTRIES,d6
- X beq.s 1$
- X moveq #RETURN_FAIL,d5
- X
- X1$: move.l a7,a0
- X call FreeAnchorChain
- X lea ap_SIZEOF+256(a7),a7
- X
- X bra.s EndLoop
- X
- X;-------------------------------------
- X; No, normal remove will do
- X; A4 File name, A3 scratch buffer
- X; D5 return value
- X
- XNoPattern: bsr.s Remove
- X;;; tst.l d0
- X bne.s EndLoop
- X
- X moveq #RETURN_FAIL,d5
- X move.l #ERROR_OBJECT_NOT_FOUND,d6
- X
- XEndLoop: tst.l d5
- X dbne.s d7,NextPar
- X
- X lea ScratchSiz+JunkSiz(a7),a7
- X
- X;-------------------------------------
- X; End this program
- X
- XExitOK: moveq #0,d2
- X move.l d5,d0
- X beq.s Exit
- X move.l d6,d2
- XExit: call ArpExit
- X rts
- X
- X;-------------------------------------
- X; Break received -- print "***break" and exit program
- X; Expects pointer to break string in A1
- X
- XBreakRcvd: call Puts
- X bra.s ExitOK
- X move.l #ERROR_BREAK,d2
- XExitFail: moveq #RETURN_FAIL,d0
- X bra.s Exit
- X
- X
- XRmRet: moveq #0,d0
- X rts
- X
- X;--------------------------------------------------------------------------
- X; Remove a file.
- X; in: A4 = filename to be removed
- X; A3 = 256 bytes scratch buffer area
- X;
- X; return 0 if failure, <>0 if remove succeeded
- X
- XRemove:
- X
- X;-------------------------------------
- X; Locate the complete file name
- X; Expects A4 filename, A3 scratch area
- X
- X move.l a4,d1
- X move.l #ACCESS_READ,d2
- X call Lock
- X
- X move.l d0,d3
- X beq.s Prnt
- X move.l a3,a0
- X move.l #256,d1
- X call PathName
- X
- X move.l d3,d1
- X call UnLock
- X
- X;-------------------------------------
- X; Print information
- X; Expects A3 full file name
- X
- XPrnt: tst.l d3
- X bne.s 1$
- X
- X move.l a4,-(a7)
- X lea RemStr(pc),a0
- X move.l a7,a1
- X call Printf
- X lea 4(a7),a7
- X lea Nofile(pc),a1
- X call Puts
- X bra.s RmRet
- X
- X1$: move.l a3,-(a7)
- X lea RemStr(pc),a0
- X move.l a7,a1
- X call Printf
- X lea 4(a7),a7
- X
- X;-------------------------------------
- X; Isolate drive name
- X; Expects A3 full file name
- X
- XIsolate: move.l a3,a0
- X
- X1$: move.b (a0)+,d0
- X cmp.b #':',d0
- X bne.s 1$
- X clr.b (a0)
- X
- X;-------------------------------------
- X; Build path for rename
- X; Expects A2 "junk" dir name, A3 full file name, A4 original file name
- X
- X move.l a3,a0
- X move.l a2,a1
- X call TackOn
- X move.l a4,a0
- X call BaseName
- X move.l d0,a1
- X move.l a3,a0
- X call TackOn
- X
- X;-------------------------------------
- X; Munch file name so it is unique and doesn't exist
- X; Expects A3 full file name to move to
- X
- X moveq #1,d4
- XFindEnd: move.l a3,a0
- X1$: tst.b (a0)+
- X bne 1$
- X lea -1(a0),a0
- X move.l a0,d3
- X
- XChkEx: move.l a3,d1
- X move.l #ACCESS_READ,d2
- X call Lock
- X move.l d0,d1
- X beq.s 1$
- X call UnLock
- X
- X movem.l a2/a3/a6,-(a7)
- X lea FileFmt(pc),a0 ; Format string
- X move.l d4,-(a7)
- X addq.l #1,d4
- X move.l a7,a1 ; Output values
- X move.l d3,a3 ; Output buffer
- X move.l 4,a6
- X lea StuffChar(pc),a2
- X call RawDoFmt
- X lea 4(a7),a7
- X movem.l (a7)+,a2/a3/a6
- X
- X bra.s ChkEx
- X
- X;-------------------------------------
- X; Now rename the file
- X; Expects A3 new, unique junk file name, A4 original file name
- X
- X1$: move.l a4,d1
- X move.l a3,d2
- XRen: call Rename
- X move.l d0,d3
- X beq.s 1$
- X lea Success(pc),a1
- X bra.s 2$
- X1$: lea Failed(pc),a1
- X2$: call Puts
- X
- X move.l d3,d0
- X rts
- X
- X;-------------------------------------
- X; StuffChar, used for Sprintf style formatting
- X
- XStuffChar: move.b d0,(a3)+
- X rts
- X
- X;-------------------------------------
- X;-------------------------------------
- X
- XRemStr: dc.b 'Removing %s...',0
- XFileFmt: dc.b ';%ld',0
- XSuccess: dc.b 'done',0
- XFailed: dc.b 'failed',0
- XNofile: dc.b 'not found',0
- X
- XJunk: dc.b 'Junk',0
- XCLITemp: dc.b 'FILES/'
- XThink: dc.b '...',0
- XCLIHelp: dc.b 'Files to remove',0
- XUsage: dc.b 'Usage: rm <file> ...',0
- XDosN: dc.b 'dos.library',0
- XArpN: ArpName
- XNoArp: dc.b 'You need arp.library V34+'
- XNoArpEnd:
- XTestByte: dc.b $a
- X
- X end
- END_OF_FILE
- if test 6702 -ne `wc -c <'rm.asm'`; then
- echo shar: \"'rm.asm'\" unpacked with wrong size!
- fi
- # end of 'rm.asm'
- fi
- if test -f 'rm.doc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'rm.doc'\"
- else
- echo shar: Extracting \"'rm.doc'\" \(8065 characters\)
- sed "s/^X//" >'rm.doc' <<'END_OF_FILE'
- X
- X
- X Page 1 RM's Documentation Page 1
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X RM
- X (c) Copyright 1989 by Martin J. Laubach
- X All rights reserved
- X
- X
- X
- X
- X
- X
- X
- X
- X 1. Introduction
- X
- X It happened again. Just now. You wanted to delete a couple of
- X files, and one tiny extra space crept in. The result -- "delete
- X t: #?", was devastating. A week's work is gone.
- X
- X That's where rm comes in. Instead of immediately deleting the
- X files, they will be moved to some trash directory. When you are
- X sure everything is OK (after some minutes when everything has
- X settled), you can empty it (at my place this automatically
- X happens once a day -- files older than 24 hours are then
- X erased).
- X
- X
- X 2. How to
- X
- X You will have to create a directory called "Junk" (or
- X something else, see below for more on that subject) that will
- X temporarily hold the rm'ed files, in the root of each volume you
- X intend to use rm on -- ie. for each partition on your hard
- X drive, if your partitions are called DH0: and DH1:, you need
- X "DH0:Junk", "DH1:Junk".
- X
- X Now, when you are rm'ing a file, it is not immediately
- X physically erased, but rather moved to that "Junk" directory.
- X Now, should you discover you just (accidentially, of course)
- X rm'ed some important file, all you have to do to recover it is
- X to go to the Junk directory, and move or copy the file back.
- X
- X
- X How to
- X
- X
- X Page 2 RM's Documentation Page 2
- X
- X
- X
- X Rm, of course, supports wildcards. "Rm #?" will delete
- X everything in your local directory (including directories and
- X "busy" files). "Rm #?.o" will remove all object modules --
- X please see your AmigaDOS manual for more information on
- X wildcards.
- X
- X You may also give it more than one parameter: "rm foo bar baz"
- X will attempt to remove the files or directories called foo, bar
- X and baz (in that order). If one of the removals fails, the whole
- X operation is aborted with an appropriate error message.
- X
- X
- X Once you really are sure you haven't removed anything lethal
- X (typically the next day), you can really (physically) delete the
- X files. The enclosed "purge" script, which needs the arp shell
- X and ARexx to run (one could do without ARexx -- it's just bells
- X and whistles), goes through each existing junk directory and
- X does such a delete.
- X
- X
- X 3. Goodies
- X
- X And finally -- two more bonus points: First, rm is very short
- X (752 bytes in the current version). That's for the people with
- X the very-full-c-directory-mania. And second, rm is completely
- X reentrant and can be made resident (e.g. with ARes). That's for
- X the people with the strange I-still-have-two-megs-left feeling.
- X
- X
- X 3.1. Bells
- X
- X Since I hate iron cast (read hard coded) definitions, you are
- X of course not limited calling the directory "Junk" -- it's just
- X the default name. Should you want to use your WorkBench
- X "TrashCan" directory, "T", or anything else, here is how to do
- X so. Using environment variables, you can assign the trash
- X directory to whatever name you want. All you have to do is a
- X "Set JUNK MyDir" (e.g. in the startup-sequence), and the rm'ed
- X files will go into ":MyDir" instead.
- X
- X
- X 3.2. Whistles
- X
- X Another nice feature of rm is that it allows multiple versions
- X of files. Suppose you just rm'ed "Foo:Foo", and you now remove
- X "Bar:Foo" -- rm won't overwrite the first version with the
- X second (and thus effectively deleting the first), but keep it
- X and add a version number to each same file that is deleted. The
- X first time you remove "Foo", it will be moved to ":Junk/Foo".
- X Each following removal of a file called "Foo" results in
- X ":Junk/Foo;1", ":Junk/Foo;2" and so on.
- X
- X
- X
- X
- X Goodies Whistles
- X
- X
- X Page 3 RM's Documentation Page 3
- X
- X
- X 4. Caveats
- X
- X Rm needs the "arp.library", version 39 or higher to run.
- X
- X Since the files aren't physically removed, you will need some
- X free space on each volume -- just rm'ing files won't give you
- X more space on a 99% full drive. You will have to purge the trash
- X directories.
- X
- X The junk directory must reside on the current volume -- since
- X it is not possible to rename files across volumes, that means
- X that every partition of your harddisk must have such a junk
- X directory.
- X
- X Also, I can't really imagine using this tool on a floppy-only
- X system.
- X
- X You shouldn't let the Junk directory grow too large --
- X especially when there are many versions of a file, rm will take
- X longer and longer. It's probably not a good idea to keep "Bar"
- X to "Bar;999", as now "rm Bar" will take rather long to execute.
- X
- X
- X 5. What
- X
- X In this archive, you should find the following files:
- X
- X rm.doc .... What you are reading right now.
- X rm.asm .... The source for rm.
- X makefile .. Guess what.
- X rm ........ The executable
- X purge ..... A script to purge the junk directory
- X
- X
- X 6. Where
- X
- X If you have any comments, ideas what could or should be
- X improved, bug reports or just like to chat a bit, please feel
- X free to contact me at one of the following addresses... I just
- X *love* receiving mail!
- X
- X Usenet: mjl@alison.at
- X ..!uunet!mcsun!tuvie!alison!mjl
- X
- X or
- X
- X FidoNet: "Martin Laubach" at 2:310/3.14
- X
- X
- X Looking forward to reading from you,
- X
- X mjl
- X
- X
- X
- X
- X Where
- X
- X
- X Page 4 RM's Documentation Page 4
- X
- X
- X
- X 7. License
- X
- X This material is (c) Copyright 1989 by Martin J. Laubach -- All
- X rights reserved.
- X
- X It may be distributed freely as long as the following
- X restrictions are met:
- X
- X The distributor may charge a fee to recover distribution
- X costs. The fee for diskette distribution should not be more than
- X the cost to obtain the same diskette from Fred Fish.
- X
- X The distributor agrees to cease distributing the programs and
- X data involved if requested to do so by the author.
- X
- X You may copy and distribute verbatim copies of the program's
- X executable code and documentation as you receive it, in any
- X medium, provided that you conspicuously and appropriately
- X publish only the original, unmodified program, with all
- X copyright notices and disclaimers of warranty intact and
- X including all the accompanying documentation, example files and
- X anything else that came with the original.
- X
- X The author will not be liable for any damage arising from the
- X failure of this program to perform as described, or any
- X destruction of other programs or data residing on a system
- X attempting to run the program. While I know of no damaging
- X errors, the user of this program uses it at his or her own
- X risk.
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X License
- X
- X
- X Page 5 RM's Documentation Page 5
- X
- X
- X 8. Road Map
- X
- X
- X
- X 1. Introduction .................................... 1
- X 2. How to ........................................... 1
- X 3. Goodies ......................................... 2
- X 3.1. Bells ........................................ 2
- X 3.2. Whistles ..................................... 2
- X 4. Caveats ......................................... 2
- X 5. What ............................................ 3
- X 6. Where ........................................... 3
- X 7. License ......................................... 4
- X 8. Road Map ......................................... 5
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X Road Map
- X
- END_OF_FILE
- if test 8065 -ne `wc -c <'rm.doc'`; then
- echo shar: \"'rm.doc'\" unpacked with wrong size!
- fi
- # end of 'rm.doc'
- fi
- if test -f 'rm.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'rm.uu'\"
- else
- echo shar: Extracting \"'rm.uu'\" \(1084 characters\)
- sed "s/^X//" >'rm.uu' <<'END_OF_FILE'
- Xbegin 664 rm
- XM```#\P`````````!``````````````"S```#Z0```+-@"DK\```+N`````!($
- XMYX"`+'@`!$/Z`I!P(DZN_=A*@&9(0_H"=G`B3J[]V$J`9AI(YP$&+CP``X`'%
- XM+'@`!$ZN_Y1,WV"`<!1.=2Q`3J[_Q"(`0?H"7B0(=AE.KO_0(DXL>``$3J[^)
- XM8F#<+$!,WP$!0_H"`T_O__PD3T?Z`>].KO\$*E=8CTJ`9@I#^@'Y3J[_$&"R+
- XM+@!/[_^P)$]!^@'((DIP4$ZN_N9*$F8$1?H!N%.'>@!\`$_O_P`F3R(\```0,
- XM`)/)3J[^[$J`9@``CBA=(DP0&6=@#```/V<,#```?&<```(V;J3^_]Z"]\C
- XM```0```(+WP```$``!`@#"!/3J[^2BP`9A9*A6822>\!&&%<9@)Z%"!/3J[^/
- XM1F2H9G"`Q&`.AG`GH4($].KOX^3^\"&&`,839F"'H4+#P```#-2H56S_]V6
- XM3^\!4'0`(`5G`B0&3J[^ADYU3J[_$L)#P```$P<!1@ZG``3G4B#'3^3J[_"
- XMK"8`9Q(@2R(\```!`$ZN_K8B`TZN_Z9*@V88+PQ!^@"H(D].KO\<6(]#^@"\<
- XM3J[_$"+PM!^@"0(D].KO\<6(\@2Q`8#```.F;X0A`@2R)*3J[]D"!,3J[]O
- XMBB)`($M.KOV0>`$@2TH89OQ!Z/__)@@B"W3^3J[_K"(`9RA.KO^F2.<`,D'Z1
- XM`$\O!%*$(D\F0RQX``1%^@`L3J[]]EB/3-],`,(@PD"TZN_[(F`&<&0_H`8
- XM*&`$0_H`)TZN_Q`@`TYU%L!.=5)E;6]V:6YG("5S+BXN`#LE;&0`9&]N90!F_
- XM86EL960`;F]T(&9O=6YD`$IU;FL`1DE,15,O+BXN`$9I;&5S('1O(')E;6]V/
- XM90!5<V%G93H@<FT@/&9I;&4^("XN+@!D;W,N;&EB<F%R>0!A<G`N;&EB<F%R-
- X@>0!9;W4@;F5E9"!A<G`N;&EB<F%R>2!6,S0K"@```_)RQ
- X``
- Xend
- Xsize 752
- END_OF_FILE
- if test 1084 -ne `wc -c <'rm.uu'`; then
- echo shar: \"'rm.uu'\" unpacked with wrong size!
- fi
- # end of 'rm.uu'
- fi
- echo shar: End of archive 1 \(of 1\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have the archive.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Submissions to comp.sources.amiga and comp.binaries.amiga should be sent to:
- amiga@cs.odu.edu
- or amiga@xanth.cs.odu.edu ( obsolescent mailers may need this address )
- or ...!uunet!xanth!amiga ( very obsolescent mailers need this address )
-
- Comments, questions, and suggestions s should be addressed to ``amiga-request''
- (only use ``amiga'' for submissions) at the above addresses.
-